/*
 * Copyright 2010 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.swt.dialog;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.mnit.basis.daten.konstant.position.POSITION_H;
import de.mnit.basis.daten.typ.zeit.Datum;
import de.mnit.basis.daten.typ.zeit.S_Datum;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.swt.anw.A_MN_Dialog;
import de.mnit.basis.swt.anw.A_MN_Gruppe;
import de.mnit.basis.swt.element.S_SWT_Komponente;
import de.mnit.basis.swt.element.steuer.SWT_Knopf;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.SWT_Kalender;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.SWT_Fenster;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.S_Fenster;
import de.mnit.basis.swt.grafik.icon.direkt.ICON;
import de.mnit.basis.swt.layout.LayoutGitter;
import de.mnit.basis.sys.sprache.S;

/**
 * @author Michael Nitsche
 * 05.07.2010	Erstellt
 */
public class K_Ablauf extends A_MN_Dialog<K_Ablauf,S_Datum> {

	public static void main(String[] args)   { start(K_Ablauf.class); }


	private static final S s=new S(K_Ablauf.class);
	private final SWT_Knopf			k_woche		= new SWT_Knopf();
	private final SWT_Knopf			k_monat		= new SWT_Knopf();
	private final SWT_Knopf			k_jahr		= new SWT_Knopf();
	private final SWT_Kalender		k_kalender	= new SWT_Kalender();
	private final SWT_Knopf			k_ok		= new SWT_Knopf();
	private final SWT_Knopf			k_nicht		= new SWT_Knopf();
	private S_Datum erg=null;
	private S_Datum puffer=null;


	public void setze(S_Datum datum) {
		if(datum==null)
			datum=Datum.neu().gPlusMonate(1);

		if(!this.erzeugt()) {
			this.puffer=datum;
			return;
		}

		this.k_kalender.sDatum(datum);
	}

	// ERSTELLEN

	protected S_Datum gErgebnis2() {
		return this.erg;
	}

	protected S_SWT_Komponente<?, ? extends Composite> layout() {
		LayoutGitter oben = LayoutGitter.neu()
			.sSpaltenAnzahl(2)
//			.sSpaltenAusgleichen()
//			.sAussenabstand(5)
			.sZwischenraumH(5)
			.sKomponente(t.k_kalender)
				.sUebergreifendV(3)
				.sBreite(200)
				.sFlexibelV()
				.fertig()
			.sKomponente(t.k_woche)
				.sFlexibel()
				.fertig()
			.sKomponente(t.k_monat)
				.sFlexibel()
				.fertig()
			.sKomponente(t.k_jahr)
				.sFlexibel()
				.fertig();

		return LayoutGitter.neu()
			.sSpaltenAnzahl(2)
			.sZwischenraumV(10)
			.sAussenabstand(5)
			.sSpaltenAusgleichen()
			.sKomponente(oben)
				.sUebergreifendH(2)
				.sFlexibel()
				.fertig()
			.sKomponente(t.k_nicht)
				.sBreite(150)
				.sPositionH(POSITION_H.LINKS)
				.fertig()
			.sKomponente(t.k_ok)
				.sBreite(100)
				.sPositionH(POSITION_H.RECHTS)
				.fertig()
			;
	}

	protected void initStyle() {
		t.k_ok.sText(s.t("OK"));
		t.k_nicht.sText(s.t("Kein Ablauf!"));

		t.k_ok.sBild(ICON._16.AKTION_OK);
		t.k_nicht.sBild(ICON._16.AKTION_ABBRUCH);

		t.k_woche.sText(s.t("1 Woche"));
		t.k_monat.sText(s.t("1 Monat"));
		t.k_jahr.sText(s.t("1 Jahr"));
	}

	protected void initEvents() {
		t.k_nicht.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				t.erg=null;
				t.schliessen();
			}
		});

		t.k_ok.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				t.erg=t.k_kalender.gDatum();
				t.schliessen();
			}
		});

		t.k_woche.eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				t.k_kalender.sDatum(Datum.neu().gPlusTage(7));
			}
		});
		t.k_monat.eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				t.k_kalender.sDatum(Datum.neu().gPlusMonate(1));
			}
		});
		t.k_jahr.eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				t.k_kalender.sDatum(Datum.neu().gPlusJahre(1));
			}
		});

		if(this.puffer!=null)
			this.setze(this.puffer);
	}

	protected S_Fenster<?> fenster(A_MN_Gruppe<?> instanz) throws F_Sys_InOut {
		return SWT_Fenster.neu(instanz, false, 350, 250, "Ablauf-Datum", ICON._16.OBJ_ZEIT, ICON._24.OBJ_ZEIT, ICON._32.OBJ_ZEIT);
	}

}
